﻿using System;
using Company.BLL;
using Company.BLL.KDT.GC;
using Company.BLL.Utils;
using Company.BLL.DuLieuChuan;
using Janus.Windows.GridEX;
using System.Windows.Forms;

namespace Company.Interface.KDT.GC
{
    public partial class NguyenPhuLieuGCBoSungForm : BaseForm
    {
        public Company.BLL.KDT.GC.HopDong hopdong = new HopDong();
        public Company.BLL.KDT.GC.PhuKien pk = new Company.BLL.KDT.GC.PhuKien();
        public Company.BLL.KDT.GC.PhuKienDangKy pkdk = new PhuKienDangKy();
        public Company.BLL.KDT.GC.PhuKienCollection pkCollection = new PhuKienCollection();
        public bool isAdd = true;//luu tru thong tin cua them moi hay sua chua      
        private int STTHang=0;
        public NguyenPhuLieuGCBoSungForm()
        {
            InitializeComponent();
        }

        private void btnClose_Click(object sender, EventArgs e)
        {
            this.Close();
        }


        private void NguyenPhuLieuGCEditForm_Load(object sender, EventArgs e)
        {
            txtMa.Focus();
            this._DonViTinh = DonViTinh.SelectAll();
            cbDonViTinh.DataSource = this._DonViTinh;
            cbDonViTinh.DisplayMember = "Ten";
            cbDonViTinh.ValueMember = "ID";
            cbDonViTinh.SelectedValue = GlobalSettings.DVT_MAC_DINH;
            if(!isAdd)
            {
                btnAdd.Text = "Sửa";
                txtMa.Text = pk.MaHang.Trim();
                txtMaHS.Text = pk.MaHS.Trim();
                txtSoLuong.Text = pk.SoLuong.ToString();
                txtTen.Text = pk.TenHang.Trim();
                cbDonViTinh.SelectedValue = pk.DVT_ID;
              
            }
            if (pkdk.TrangThaiXuLy == TrangThaiXuLy.DA_DUYET)
            {
                btnAdd.Enabled = false;               
                return;
            }
            foreach (PhuKien s in pkdk.PKCollection)
            {
                if (s.STTHang > STTHang)
                    STTHang = s.STTHang;
            }
            pkCollection = pkdk.PKCollection;
            dgList.DataSource = pkCollection;
        }

        private void txtMaHS_Leave(object sender, EventArgs e)
        {
            if (!MaHS.Validate(txtMaHS.Text, 10))
            {
                error.SetIconPadding(txtMaHS, -8);
                error.SetError(txtMaHS, "Mã số HS không hợp lệ.");
            }           
        }

        private void btnAdd_Click(object sender, EventArgs e)
        {
            cvError.Validate();
            if (!cvError.IsValid) return;
            {
                if (!MaHS.Validate(txtMaHS.Text.Trim(), 10))
                {
                    error.SetIconPadding(txtMaHS, -8);
                    error.SetError(txtMaHS, "Mã số HS không hợp lệ.");
                    return;
                }
                if (Convert.ToDecimal(txtSoLuong.Text) == 0)
                {
                    error.SetError(txtSoLuong, "Số lượng phải lớn hơn 0.");
                    return;
                }              
                if (txtMaHS.Text.Trim().Length !=10)
                {
                    error.SetError(txtMaHS, "Mã HS phải có 10 số.");
                    return;
                }
              
                checkExitsNPLAndSTTHang();
            }
        }
        private void reset()
        {
            txtMa.Text = "";
            txtMaHS.Text = "";
            txtSoLuong.Text = "0";
            txtTen.Text = "";
            dgList.Refetch();            
            isAdd = true;
            pk = new PhuKien();
            txtMa.Focus();
            btnAdd.Text = "Thêm";
        }
        private void checkExitsNPLAndSTTHang()
        {
            if (!isAdd)
                pkCollection.Remove(pk);
            else//lay thong tin tao moi
            {                
                pk.SoLuong = Convert.ToDecimal(txtSoLuong.Text);
                pk.TenHang = txtTen.Text.Trim();
                pk.MaHang = txtMa.Text.Trim();
                pk.MaHS = txtMaHS.Text.Trim();
                pk.DVT_ID = cbDonViTinh.SelectedValue.ToString();
                pk.Master_ID = pkdk.ID;
                pk.STTHang = STTHang + 1;
            }
           
            foreach (PhuKien pkienBoSung in pkCollection)
            {
                if (pkienBoSung.MaHang==txtMa.Text.Trim())
                {
                    if (isAdd)//cap nhat
                    {
                        string st = ShowMessage("Đã có nguyên phụ liệu này trong danh sách. Bạn có muốn cập nhật lại không?", true);
                        if (st == "Yes")
                        {
                            pkienBoSung.SoLuong = Convert.ToDecimal(txtSoLuong.Text);
                            pkienBoSung.TenHang = txtTen.Text.Trim();
                            pkienBoSung.MaHang = txtMa.Text.Trim();
                            pkienBoSung.MaHS = txtMaHS.Text.Trim();
                            pkienBoSung.DVT_ID = cbDonViTinh.SelectedValue.ToString();                            
                            reset();                          
                            return ;
                        }
                        else
                        {
                            pk = new PhuKien();
                            txtMa.Focus();
                            return ;
                        }
                    }
                    else
                    {
                        ShowMessage("Đã có nguyên phụ liệu này trong danh sách.", false);
                        txtMa.Focus();
                        pkCollection.Add(pk);  
                        return;
                    }
                }                                  
            }
            NguyenPhuLieu npl = NguyenPhuLieu.Load(txtMa.Text.Trim(),pkdk.HopDong_ID);           
            if (npl != null && npl.Ma.Length > 0)
            {
                ShowMessage("Đã khai báo nguyên phụ liệu này trong hợp đồng.", false);
                txtMa.Focus();
                if (!isAdd)
                {                   
                    pkCollection.Add(pk);
                    reset();
                }
                return;
            }
            else
            {
                PhuKien pkCheck = new PhuKien();
                pkCheck = pk.LoadSanPham(pkdk.HopDong_ID, "N01", txtMa.Text.Trim(), pkdk.SoPhuKien);
                if (pkCheck != null)
                {
                    ShowMessage("Đã khai báo nguyên phụ liệu này trong phụ kiện khác.", false);
                    txtMa.Focus();
                    if (!isAdd)
                    {
                        pkCollection.Add(pk);
                        reset();
                    }
                    return;
                }
                else 
                {
                    pkCheck = pk.LoadSanPham(pkdk.HopDong_ID, "N11", txtMa.Text.Trim(), pkdk.SoPhuKien);
                    if (pkCheck != null)
                    {
                        ShowMessage("Đã khai báo nguyên phụ liệu này trong phụ kiện khác.", false);
                        txtMa.Focus();
                        if (!isAdd)
                        {
                            pkCollection.Add(pk);
                            reset();
                        }
                        return;
                    }
                }              
            }
            if (isAdd)
            {
                pkCollection.Add(pk);
                STTHang++;
                reset();
            }
            else//cap nhat
            {
                pk.SoLuong = Convert.ToDecimal(txtSoLuong.Text);
                pk.TenHang = txtTen.Text.Trim();
                pk.MaHang = txtMa.Text.Trim();
                pk.MaHS = txtMaHS.Text.Trim();
                pk.DVT_ID = cbDonViTinh.SelectedValue.ToString();
                pk.Master_ID = pkdk.ID;
                pkCollection.Add(pk);  
                reset();                     
                return ;
            }            
        }

        private void dgList_DeletingRecord(object sender, Janus.Windows.GridEX.RowActionCancelEventArgs e)
        {
            if (pkdk.TrangThaiXuLy == TrangThaiXuLy.DA_DUYET)
            {                             
                ShowMessage("Phụ kiện đã duyệt chính thức. Không được chỉnh sửa",false);
                e.Cancel = true;
                return;        
            }
            if (e.Row.RowType == RowType.Record)
            {
                if (ShowMessage("Bạn có muốn xóa nguyên phụ liệu này không?", true) == "Yes")
                {
                    PhuKien pkDelete = new PhuKien();
                    pkDelete.ID = (long)Convert.ToInt64(e.Row.Cells[1].Text);
                    if (pkDelete.ID > 0)
                    {
                        pkDelete.Delete();                        
                    }
                }
                else
                {
                    e.Cancel = true;
                }
            }
        }

        

        private void NguyenPhuLieuGCEditForm_FormClosing(object sender, System.Windows.Forms.FormClosingEventArgs e)
        {
           
        }

        private void dgList_RowDoubleClick(object sender, Janus.Windows.GridEX.RowActionEventArgs e)
        {
            btnAdd.Text = "Sửa";
            pk.MaHang = e.Row.Cells[3].Text.Trim();
            pk.TenHang = e.Row.Cells[4].Text.Trim();
            pk.MaHS = e.Row.Cells[5].Text.Trim();
            pk.DVT_ID = e.Row.Cells[6].Text;
            pk.SoLuong = Convert.ToDecimal(e.Row.Cells[8].Text);
            pk.STTHang = (int)Convert.ToDecimal(e.Row.Cells[2].Text);
            pk.ID = (long)Convert.ToDecimal(e.Row.Cells[1].Text);            
            txtMa.Text = pk.MaHang;
            txtMaHS.Text = pk.MaHS;
            txtSoLuong.Text = pk.SoLuong.ToString();            
            txtTen.Text = pk.TenHang;
            cbDonViTinh.SelectedValue = pk.DVT_ID;                                           
            isAdd = false;            
        }

        private void dgList_LoadingRow(object sender, RowLoadEventArgs e)
        {
            e.Row.Cells[7].Text = this.DonViTinh_GetName(e.Row.Cells[6].Value).Trim();
            
        }
    }
}